Некоторые полезные исходники, которые могут быть полезны и вам.


#include <vector.h>
typedef vector<AnsiString>::const_iterator VI_S;
//------------------------------------------------------------------------------------------------
//                   Удаляет из line все ch
//------------------------------------------------------------------------------------------------
AnsiString clearLine_ch(AnsiString line, char ch)
{
  if(ch=='\0'){
    return line;
  }
  AnsiString str=line;
  int i=1;
  while(i<=str.Length()){
    if(str[i]==ch)
      str.Delete(i,1);
    else
      i++;
  }
  return str;
}
//------------------------------------------------------------------------------------------------
//                   Удаляет из line все smb[i]
//------------------------------------------------------------------------------------------------
AnsiString clearLine(AnsiString line, AnsiString smb)
{
  if(smb.Length()==0){
    return line;
  }
  AnsiString str=line;
  for (int i=1;i<=smb.Length();i++){
    str=clearLine_ch(str,smb[i]);
  }
  return str;
}
//------------------------------------------------------------------------------------------------
//  Разбивает line на вектор arr по разделителю separator и удаляет все smbNP[i]
//          (адаптированый для строк в '' содержащие separator)
//------------------------------------------------------------------------------------------------
bool SplitStr(AnsiString line, vector<AnsiString> & arr, char separator, 
                   AnsiString smbNP, char str_separ, bool clearVec)
{
  if(clearVec)
    arr.clear();
  AnsiString str="",tmp_line=line;;
  bool begin=false;
  for(int i=1;i<=tmp_line.Length();i++){
    if(tmp_line[i]==str_separ){
      begin=!begin;
    }
    if(!begin && tmp_line[i]==separator){
      str=clearLine(str,smbNP);
      arr.push_back(str);
      str="";
      continue;
    }
      str+=tmp_line[i];
  }
  if(str.Length()>0){
    str=clearLine(str,smbNP);
    arr.push_back(str);
    str="";
  }
  return true;
}
//------------------------------------------------------------------------------------------------
//  Разбивает line на вектор arr по разделителю separator и удаляет все smbNP[i]
//------------------------------------------------------------------------------------------------
bool Split(AnsiString line, vector<AnsiString> & arr, char separator, 
                AnsiString smbNP, bool clearVec)
{
  if(clearVec)
    arr.clear();
  AnsiString str="",tmp_line=line;
  for(int i=1;i<=tmp_line.Length();i++){
    if(tmp_line[i]==separator){
      str=clearLine(str,smbNP);
      arr.push_back(str);
      str="";
      continue;
    }
    str+=tmp_line[i];
  }
  if(str.Length()>0){
    str=clearLine(str,smbNP);
    arr.push_back(str);
    str="";
  }
  return true;
}
//------------------------------------------------------------------------------------------------
//  Заменяет в строке line все fnd_str на  repl_str
//------------------------------------------------------------------------------------------------
AnsiString Replace(AnsiString line, AnsiString fnd_str, AnsiString repl_str)
{
  AnsiString tmp=line;
  int kol=fnd_str.Length();
  if(StrPos(tmp.c_str(),fnd_str.c_str()))
  {
    int ind=tmp.Pos(fnd_str);
    tmp.Delete(ind,kol);
    tmp.Insert(repl_str,ind);
    tmp=Replace(tmp,fnd_str,repl_str);
    return tmp;
  }else
    return tmp;
}
//------------------------------------------------------------------------------------------------
//  Удаление из строки всех вхождений beg_str??????end_str
//------------------------------------------------------------------------------------------------
AnsiString DeleteMacros(AnsiString line, AnsiString beg_str, AnsiString end_str)
{
  AnsiString tmp=line;
  int idx=0,idx2=0;
  if((idx=tmp.Pos(beg_str)))
  {
    AnsiString tmp2=tmp.SubString(idx+beg_str.Length(),tmp.Length());
    if((idx2=tmp2.Pos(end_str))){
      tmp.Delete(idx,beg_str.Length()+idx2+end_str.Length()-1);
      return DeleteMacros(tmp, beg_str, end_str);
    }
  }
  return tmp;
}
//------------------------------------------------------------------------------------------------
//  Возвращает первую подстроку, начинающуюся на beg_str 
//   и оканчивающуюся на end_str
//------------------------------------------------------------------------------------------------
AnsiString FindMacros(AnsiString line, AnsiString beg_str, AnsiString end_str)
{
  AnsiString tmp=line;
  int idx=0,idx2=0;
  if((idx=tmp.Pos(beg_str)))
  {
    AnsiString tmp2=tmp.SubString(idx+beg_str.Length(),tmp.Length());
    if((idx2=tmp2.Pos(end_str))){
      return tmp.SubString(idx,beg_str.Length()+idx2+end_str.Length()-1);
    }
  }
  return "";
}

Rambler's Top100
Hosted by uCoz